package com.example.administrator.appstpremvpdemo.contract;

import com.example.administrator.appstpremvpdemo.presenter.BasePresenter;
import com.example.administrator.appstpremvpdemo.view.BaseView;
import com.example.administrator.appstpremvpdemo.model.BaseModel;
import java.util.Map;

/**
 * Created by Administrator on 2017/12/1.
 * 定义了契约类（接口）。
 * 使用契约类来统一管理view与presenter的所有的接口，这种方式使得view与presenter中有哪些功能，一目了然，维护起来也很方便。
 */

public interface AppListContract {

    interface View<T> extends BaseView<Presenter<T>> {
        //这里包含view的实现类的用户交互
        void showApplist(T data);

        void showNoMoreDataTips();

        void showloaderrotips(String erromsg);

        void showLoadingTip();

    }

    interface Presenter<T> extends BasePresenter {
        //这里包含presenter实现类的业务逻辑

        void downloadapp();

        void onstartRequest();

        void noMoreData();

        void showApplist(T data);

        void setParms(Map<String ,String> parms);

        void handleRequestException(Exception e);

        void getNextPageData();
    }

    /**
     * 这里可以添加一个Model的内部类factory，专门用于生产model的实现类
     * @param <T>
     */
    interface Model<T> extends BaseModel {

        void setParms(Map<String ,String> parms);

        void getNextPageData();

        void requestData();

        void downloadapp(String url);
    }
}
